package com.study.example.ex01;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

import org.junit.Test;

/**
* @Name: ImageCopyDemo
* @Description: 复制图片的四种方式练习
* 说明：
* 	复制图片、视频、音频、压缩文件、exe可执行文件等
* 		分析：
* 			复制数据时，若使用记事本打开可以读懂，使用字符流，否则使用字节流；
* 			即复制图片、视频、音频、压缩文件、exe可执行文件等时，采用字节流的方式，总共有4种方法可以实现
* @Author: 李超	lc_jack@foxmail.com
* @CreateDate: 2017-1-16 上午10:23:13 
* @Version: V1.0
 */
public class ImageCopyDemo {
	
	/**
	* @Name: imageCopy01
	* @Description: 使用文件字节流实现（一次读取一个字节）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-16 上午10:25:47
	* @Parameters: @throws IOException
	* @Return: void
	 */
	@Test
	public void imageCopy01() throws IOException {
		FileInputStream fis = new FileInputStream("fos.txt") ;
		FileOutputStream fos = new FileOutputStream("copy.txt") ;
		//一次读取一个字节
		int b = 0 ;
		while((b = fis.read()) != -1) {
			fos.write(b) ;
		}
		fos.close() ;
		fis.close() ;
	}
	
	/**
	* @Name: imageCopy02
	* @Description: 使用文件字节流实现（一次读取一个字节数组）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-16 上午10:26:13
	* @Parameters: @throws IOException
	* @Return: void
	 */
	@Test
	public void imageCopy02() throws IOException {
		FileInputStream fis = new FileInputStream("fos.txt") ;
		FileOutputStream fos = new FileOutputStream("copy.txt") ;
		//一次读取一个字节数组
		byte[] buf = new byte[1024] ;
		int len = 0 ;
		while((len = fis.read(buf)) != -1) {
			fos.write(buf, 0, len) ;
			fos.flush() ;
		}
		fos.close() ;
		fis.close() ;
	}
	
	/**
	* @Name: imageCopy03
	* @Description: 使用高效字节流实现（一次读取一个字节）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-16 上午10:26:22
	* @Parameters: @throws IOException
	* @Return: void
	 */
	@Test
	public void imageCopy03() throws IOException {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("fos.txt")) ;
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.txt")) ;
		//一次读取一个字节
		int b = 0 ;
		while((b = bis.read()) != -1) {
			bos.write(b) ;
		}
		bis.close() ;
		bos.close() ;
	}
	
	/**
	* @Name: imageCopy04
	* @Description: 使用高效字节流实现（一次读取一个字节数组）
	* @Author: 李超	lc_jack@foxmail.com
	* @Version: V1.0
	* @CreateDate: 2017-1-16 上午10:26:41
	* @Parameters: @throws IOException
	* @Return: void
	 */
	@Test
	public void imageCopy04() throws IOException {
		BufferedInputStream bis = new BufferedInputStream(new FileInputStream("fos.txt")) ;
		BufferedOutputStream bos = new BufferedOutputStream(new FileOutputStream("copy.txt")) ;
		//一次读取一个字节数组
		byte[] buf = new byte[1024] ;
		int len = 0 ;
		while((len = bis.read(buf)) != -1) {
			bos.write(buf, 0, len) ;
			bos.flush() ;
		}
		bis.close() ;
		bos.close() ;
	}

}
